package com.itzh.netty.groupchat;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;

public class GroupChatServer {
    private int port;
    public GroupChatServer(int port){
        this.port = port;
    }
    public void run() throws InterruptedException {
        EventLoopGroup bossGroup = new NioEventLoopGroup(1);
        EventLoopGroup workerGroup = new NioEventLoopGroup();
       try{
           ServerBootstrap b = new ServerBootstrap();
           b.group(bossGroup,workerGroup)
                   .channel(NioServerSocketChannel.class)
                   .option(ChannelOption.SO_BACKLOG,128)
                   .childOption(ChannelOption.SO_KEEPALIVE,true)
                   .childHandler(new ChannelInitializer<SocketChannel>() {
                       @Override
                       protected void initChannel(SocketChannel ch) throws Exception {
                           //获取到 pipeline
                           ChannelPipeline pipeline = ch.pipeline();
                           //向pipeline加入解码器
                           pipeline.addLast("decoder",new StringDecoder());
                           //向pipeline加入编码器
                           pipeline.addLast("encoder",new StringEncoder());
                           //加自己的业务处理Handler
                           pipeline.addLast(new GroupChatServerHandler());
                       }
                   });
           System.out.println("netty 服务器启动");
           ChannelFuture channelFuture = b.bind(port).sync();
           //监听关闭
           channelFuture.channel().closeFuture().sync();
       }finally {
           bossGroup.shutdownGracefully();
           workerGroup.shutdownGracefully();
       }
    }
    public static void main(String[] args) throws InterruptedException {
        new GroupChatServer(7000).run();
    }
}
